/*
 ============================================================================
 Name        : tp1
 Author      : Pablo Henrique dos Reis
 Description : Trabalho pratico 1 AEDS III
 ============================================================================
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "geradorAutomato.h"
#include "entradaSaida.h"

#define arqSaida "tp1-2.c"

int main(int argc, char *argv[]) {

	 /*recebe o padrao como parametro*/
	char *padrao =  argv[1];

	/*Adiciona um caracter qualquer ao padrão para gerar a matriz de estados com o
	numero de colunas igual ao tamanho do padrao recebido mais um.*/
	strcat(padrao,"$");

	/*obtem o tamanho do padrao, ja com o caracter adicional*/
	int tamPadrao = contarTexto(padrao);

	/*obtem o alfabeto do padrão*/
	char *alfabeto = obterAlfabeto(padrao,tamPadrao-1);

	/*obtem o tamanho do alfabeto*/
	int tamAlfabeto = contarTexto(alfabeto);

	/*cria a matriz de estados do automato de tamanho do alfabeto pelo tamanho do padrao + 1*/
	int **matriz = gerarMatrizEstados(padrao,alfabeto,tamAlfabeto,tamPadrao);

	/*gera o codigo fonte do automato finito para encontrar o padrao em um arquivo texto*/
	gerarCodigoAutomato(arqSaida,alfabeto,padrao,matriz,tamAlfabeto,tamPadrao);

	/*libera a memoria ocupada pela matriz*/
	liberaMatriz(matriz,tamAlfabeto);

	return 0;
}
